Пульт.Онлайн /

Математические выражения

Математические выражения в прототипах
Математические выражения на мнемосхемах
Логические функции
Арифметические функции
Битовые функции
Тригонометрические функции
Функции тревог
Функции времени
Операторы
Константы
Специальные функции в скриптах


Математические выражения в прототипах

Некоторые параметры переменных допускают использование математических выражений с подстановкой значений одной или нескольких переменных. Например, виртуальная переменная в режиме "Выражение" или аварийные переменные (параметры Сигнал, Уставка и т.п.).

Простейшее выражение может состоять из имени наблюдаемой переменной. Имена переменных необходимо предварять символом $.

Допустимо использование как локальных (в контексте узла) имен переменных, так проектных и глобальных. Для доступа к переменным того же узла (локальные имена) указывайте имя переменной в прототипе, например, $var1.

Для доступа к переменным других узлов того же проекта, указывайте имя с префиксом узла, например, $N25_var1.

Для доступа к переменным других проектов, указывайте имя с префиксом проекта и узла, например, $P3_N25_var1.

Глобальное и проектное имя можно узнать, кликнув на переменную в интерфейсе, в списке переменных узла или в редакторе проектов на вкладке узла "Переменные".

При ошибке одной из переменных в выражении, значение выражения будет равно ошибке DRV_ERROR_UNRELIABLE_VAR (недостоверное значение).

Так же доступны суффиксы (через два подчеркивания):

__error - код ошибки переменной
__time - Timestamp (в миллисекундах) последнего изменения статуса переменной
__value - значение (позволяет всегда получать последнее достоверное значение переменной и игнорировать ошибку).

Примеры выражений

$var1 - локальное (в контексте узла) имя переменной
$P3_N25_var1 - глобальное имя переменной (префикс проекта + префикс узла + имя)
$var1+$var2 - сумма значений var1 и var2
$var1__value+$var2__value - сумма последних достоверных значений var1 и var2 (ошибки переменных игнорируются)
if($sensor__error,$min_power,$max_power) - функция if проверяет код ошибки переменной sensor и возвращает значение одной из переменных xxx_power
sqrt(pow($active_power,2)+pow($reactive_power,2)) - вычисление общей мощности
bit($status,3) - возвращает 1, если установлен четвертый бит (бит с индексом 3) в переменной status list($mode,0,"OFF",1,"ON",2,"AUTO") - возвращает OFF, если $mode == 0; ON, если $mode == 1; AUTO, если $mode == 2
$temperature/10 - возвращает значение переменной temperature, деленное на 10


Математические выражения на мнемосхемах

На мнемосхемах практически в любые свойства контролов допускается прямая передача доступных свойств пользователя, узла или переменной, а также подстановка математических выражений.

При использовании математического выражения в полях контролов на мнемосхеме его необходимо обрамлять двойными фигурными скобками: {{см. примеры}}. При этом, простые значения (без математических или логических операций) можно подставлять как есть.

Доступные свойства узла

$node1.title - имя узла
$node1.path - полный путь узла
$node1.prefix - глобальный префикс узла
$node1.params.param1 - значение параметра узла (param1 замените именем требуемого параметра)
$node1.tags.mytag - 1 если тег установлен для узла, иначе - 0 (замените mytag именем требуемого тега)

Доступные свойства переменной

$node1.vars.var1.bit0 - $node1.vars.var1.bit31 - значение отдельного бита, если нет ошибки; иначе - undefined
$node1.vars.var1.vbit0 - $node1.vars.var1.vbit31 - последнее достоверное значение отдельного бита, не зависимо от ошибки

$node1.vars.var1 - значение, если нет ошибки; иначе - undefined (аналогично .status)
$node1.vars.var1.status - значение, если нет ошибки; иначе - undefined.
$node1.vars.var1.value - последнее достоверное значение, не зависимо от ошибки. Используйте это свойство, если требуется отключить мерцание контролов при недостоверных значениях переменной.
$node1.vars.var1.time - время (Timestamp c миллисекундами)
$node1.vars.var1.error - код ошибки
$node1.vars.var1.update - вспомогательная структура

$node1.vars.var1.global_name - глобальное имя переменной
$node1.vars.var1.name - локальное имя переменной
$node1.vars.var1.title - description, если задан; иначе - name
$node1.vars.var1.description - краткое описание переменной
$node1.vars.var1.comment - комментарий
$node1.vars.var1.unit - единица измерения
$node1.vars.var1.tags.<tag_name> - 1 если тег установлен для переменной, иначе - 0, см. примеры $node1.vars.var1.trend - переменная пишет тренд (1|0) $node1.vars.var1.physical - переменная физическая (1|0) $node1.vars.var1.payload - служебный объект payload для переменных некоторых драйверов
$node1.vars.var1.exec - у пользователя есть доступ на изменение значения переменной (1|0)

Доступные свойства пользователя

$user.login - логин пользователя
$user.home_page - путь страницы по умолчанию
$user.home_project - путь проекта по умолчанию
$user.home_url - произвольный URL по умолчанию
$user.icon - иконка пользователя
$user.anonymous - анонимный пользователь (1|0)
$user.changepass - требование сменить пароль при входе (1|0)
$user.readonly - пользователь с правами "только чтение и выполнение" (1|0)
$user.demo - демо-пользователь (1|0)
$user.admin - пользователь является администратором системы (1|0)
$user.name - имя пользователя
$user.language - язык пользователя
$user.allowed_ip - разрешенные IP
$user.department - отдел
$user.position - должность
$user.info - информация
$user.phone - телефон
$user.email - email
$user.receive_email - получать email-уведомления (1|0)
$user.receive_telegram - получать телеграм-уведомления (1|0)
$user.receive_sms - получать SMS-уведомления (1|0)
$user.receive_alarm_notifications - получать уведомления об авариях (1|0)
$user.receive_fault_notifications - получать уведомления о неисправностях (1|0)
$user.receive_warning_notifications - получать уведомления о предупреждениях (1|0)
$user.receive_notice_notifications - получать уведомления об оповещениях (1|0)
$user.receive_var_notifications - получать уведомления об изменениях переменных (1|0)
$user.receive_system_notifications - получать системные уведомления (1|0)
$user.receive_user_notifications - получать пользовательские сообщения (1|0)
$user.receive_alarm_act - получать уведомления об активации тревог (1|0)
$user.receive_alarm_norm - получать уведомления о нормализации тревог (1|0)
$user.receive_alarm_ack - получать уведомления о квитировании тревог (1|0)
$user.receive_alarm_unack - получать уведомления об отмене квитирования тревог (1|0)
$user.receive_alarm_shlv - получать уведомления о блокировке тревог (1|0)
$user.receive_alarm_unshlv - получать уведомления о разблокировке тревог (1|0)
$user.kiosk_mode - режим киоска (1|0)
$user.show_navigation - показывать панель навигации (1|0)
$user.show_notifications - показывать панель уведомлений (1|0)
$user.show_path - показывать строку пути (1|0)
$user.editor_access - доступ к редактору проектов (1|0)
$user.active_sessions - количество активных сессий
$user.groups.<имя группы> - 1, если пользователь в группе, см. примеры

Доступные параметры мнемосхемы

Доступ к параметрам мнемосхемы, определенным на вкладке Параметры, осуществляется по их имени с символом $. Если параметр заведен и ему указано значение по умолчанию, но в Экране значение параметра не задано явно - значение параметра будет пустой строкой. Чтобы получить значение параметра с учетом значения по умолчанию, предварите имя параметра $__двумя_подчеркиваниями. Параметры могут использоваться как временные локальные переменные.

Локальное хранилище пользователя

Объект $storage может использоваться для локального хранения значений. Например, состояний раскрытых панелей. Значения хранятся на устройстве пользователя и недоступны другим пользователям или тому же пользователю, но на другом устройстве.

Например, привяжите к полю value переключателя свойство $storage.left_panel_closed, а также привяжите его к свойству invisible прямоугольника-контейнера. Тогда переключение переключателя будет скрывать/раскрывать прямоугольник с его содержимым. При этом, состояние свойства, а значит и отображение прямоугольника будет сохраняться при перезагрузке.

Примеры выражений

$width - ширина мнемосхемы (параметр width должен быть заведен в Параметрах)
$__width - ширина мнемосхемы с учетом значения по умолчанию
$storage.left_panel_closed - вернет ранее сохраненное значение
$node1.vars.var1 - статус переменной (достоверное значение или undefined при ошибке)
$node1.vars.var1.value - последнее достоверное значение (независимо от ошибки)
$node1.vars.var1.error - код ошибки
$node1.vars.var1.unit - единица измерения переменной
$node1.vars.var1.bit0 - значение первого бита (индекс 0)
$node1.vars.var1.bit3 - значение четвертого бита (индекс 3)
$node1.vars.var1.tags.floor2 - 1 если тег floor2 задан для переменной, иначе 0
$node1.params.host - параметра узла host
$node1.vars.var1 -> $node1.vars.var2 - чтение контролом из var1, а запись в var2
{{ $node1.vars.speed/10 }} RPM - приведенное значение скорости с суффиксом RPM
dP {{ $node1.vars.press/10 }} $node1.vars.press.unit - приведенное давление с префиксом и ед. измерения
{{ if($node1.vars.mode.bit3 && $node1.vars.mode.bit6,"red","blue") }} - цвета по условию
Вы вошли как {{if($user.groups.оператор,"Оператор","Гость")}} - проверка принадлежности к группе


Логические функции

if(X,Y,Z) - если X не равен 0, возвращает Y, иначе Z
list(X,I0,V0,I1,V1,I2,V2,...,In,Vn) - возвращает искомое значение по индексу, X - индекс искомого значения, In - индекс n-го значения, Vn - n-ое значение. Если X не найден - возвращается последний аргумент.


Арифметические функции

abs(X) - модуль числа Х
cbrt(X) - кубический корень X
ceil(X) - наименьшее целое, которое не меньше чем X
exp(X) - число "e", возведенное в указанную степень.
floor(X) - наименьшее целое, которое не меньше чем X
log(X) - натуральный логарифм от X
log10(X) - десятичный логарифм от X
max(X1,X2,...,Xn) - возвращает значение максимального аргумента
min(X1,X2,...,Xn) - возвращает значение минимального аргумента
pow(X,Y) - возведение X в степень Y
round(X) - округляет X до целого
round2(X,Y) - округляет X до Y знаков после запятой
sqrt(X) - квадратный корень от X


Битовые функции

bit(X,Y) - возвращает 1 если в X установлен бит Y
bool(X) - возвращает 0 если X равен 0, иначе 1
double(A,B,C,D,E,F,G,H) - конвертирует 8 байт (A,B,C,D,E,F,G,H) в число формата IEEE-754 Floating Point 64-bit (Double precision)
float(A,B,C,D) - конвертирует 4 байта (A,B,C,D) в число формата IEEE-754 Floating Point 32-bit
hi16(X) - возвращает старшие 8 бит 16-битного числа
hi32(X) - возвращает старшие 16 бит 32-битного числа
lo16(X) - возвращает младшие 8 бит 16-битного числа
lo32(X) - возвращает младшие 16 бит 32-битного числа
msb(X) - возвращает индекс самого старшего установленного бита (Most Significant Bit)
lsb(X) - возвращает индекс самого младшего установленного бита (Least Significant Bit)


Тригонометрические функции

acos(X) - обратный косинус Х, радианы
acosh(X) - обратный гиперболический косинус Х, радианы
asin(X) - обратный синус Х, радианы
asinh(X) - обратный гиперболический синус Х, радианы
atan(X) - обратный тангенс Х, радианы
atanh(X) - обратный гиперболический тангенс Х, радианы
atan2(X,Y) - равняется atan(X/Y), за исключением того, что в atan2 аргумент Y может принимать значение 0
cos(X) - косинус Х, радианы
cosh(X) - гиперболический косинус Х, радианы
hypot(X,Y) - гипотенуза при катетах X и Y
sin(X) - синус Х, радианы
sinh(X) - гиперболический синус Х, радианы
tan(X) - тангенс Х, радианы
tanh(X) - гиперболический тангенс Х, радианы


Функции тревог

Значение тревожной переменной представляет комбинацию бит:

BIN   DEC  РАСШИФРОВКА 
1000  8    неквитированная тревога
0100  4    активная тревога 
0010  2    старший бит класса тревоги
0001  1    младший бит класса тревоги

Классы тревог:

3 - авария
2 - неисправность
1 - предупреждение
0 - оповещение

Примеры значений тревожной переменной:

15 = 1111 = 8 + 4 + 2 + 1 = активная неквитированная авария
06 = 0110 = 0 + 4 + 2 + 0 = активная неисправность
09 = 1001 = 8 + 0 + 0 + 1 = неактивное неквитированное предупреждение
04 = 0100 = 0 + 4 + 0 + 0 = активное оповещение
00 = 0000 = неактивная тревога, не требующая квитирования или заблокированная тревога (класс не определен)

Для упрощения работы с признаками тревог доступны следующие функции:

alarm_unack(A) - возвращает 1 если А неквитированная, иначе - 0
alarm_active(A) - возвращает 1 если А активная, иначе - 0
alarm_urgent(A) - возвращает 1 если А срочная (активная и неквитированная), иначе - 0
alarm_actual(A) - возвращает 1 если А актуальная (активная или неквитированная), иначе - 0
alarm_class(A) - для актуальных тревог возвращает код класса (3 - авария, 2 - неисправность, 1 - предупреждение, 0 - оповещение)
alarm_max_act(A1,A2,...,An) - возвращает максимальное значение тревоги с приоритетом активности
alarm_max_unack(A1,A2,...,An) - возвращает максимальное значение тревоги с приоритетом неквитированности (аналогично max(A1,A2,...,An))


Функции времени

timestamp() - Unix Timestamp, секунды
timestampms() - Unix Timestamp, миллисекунды
hour(T) - если T не задан, возвращает текущий час (0-23); иначе - час от таймштампа T
minute(T) - если T не задан, возвращает текущую минуту (0-59); иначе - минуту от таймштампа T
second(T) - если T не задан, возвращает текущую секунду (0-59); иначе - секунду от таймштампа T
year(T) - если T не задан, возвращает текущий год; иначе - год от таймштампа T
month(T) - если T не задан, возвращает текущий месяц (1-12); иначе - месяц от таймштампа T
mday(T) - если T не задан, возвращает текущий день месяца (1-31); иначе - день месяца от таймштампа T
wday(T) - если T не задан, возвращает текущий день недели (1-7); иначе - день недели от таймштампа T
yday(T) - если T не задан, возвращает текущий день года (1-366); иначе - день года от таймштампа T
zone() - часовая зона, секунды от UTC
uptime() - время от запуска сервиса, где выполняется функция, секунды


Операторы

-X - унарный минус
!X - унарное логическое НЕ
^X - унарное побитовое НЕ
X ** Y - возведение X в степень Y
X * Y - умножение X на Y
X / Y - деление X на Y
X % Y - остаток от деления X на Y
X + Y - сложение X и Y
X - Y - вычитание Y из X
X << Y - побитовый сдвиг X на Y бит влево
X >> Y - побитовый сдвиг X на Y бит вправо
X < Y - 1, если X меньше Y, иначе - 0
X <= Y - 1, если X меньше или равно Y, иначе - 0
X > Y - 1, если X больше Y, иначе - 0
X >= Y - 1, если X больше или равно Y, иначе - 0
X == Y - 1, если X равен Y, иначе - 0
X != Y - 1, если X не равен Y, иначе - 0
X & Y - побитовое И
X | Y - побитовое ИЛИ
X ^ Y - побитовое исключающее ИЛИ
X && Y - логическое И
X || Y - логическое ИЛИ


Константы

PI - 3.14159265358979323846
E - 2.71828182845904509079


Специальные функции в скриптах

str(X) - возвращает строковое представление числа X
exec(C,T) - выполняет команду командной строки C, T - timeout выполнения
telegram(N,M) - выполняет отправку Telegram-сообщения M на номер N
sms(N,M) - выполняет отправку SMS-сообщения M на номер N
reboot() - перезагружает устройство
print(A,B,C,...) - вывод строковых значений аргументов в консоль отладки скрипта

date(T) - строковое представление даты от таймштампа T (необязательный) в формате DD.MM.YYYY time(T) - строковое представление времени от таймштампа T (необязательный) в формате hh.mm.ss datetime(T) - строковое представление даты-времени от таймштампа T (необязательный) в формате DD.MM.YYYY hh.mm.ss

Примеры скриптов

  Email
   fdb_list
   fdb_load
   fdb_move
   fdb_paths
   node_list
   subscribe
   var_get
   var_list
   var_set